<HTML>
<HEAD>
  <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
  <META HTTP-EQUIV="Description" CONTENT="
BEGIN PYTHON-PACKAGE-INFO 1.0
Current-Version:        1.6
Title:                  GerbMerge -- A Gerber-file merging program
Home-page:              http://claymore.engineer.gvsu.edu/~steriana/Python
Description:            Merges Gerber/Excellon circuit board files
Keywords:               Eagle Gerber Excellon merging panel panelizing merge PCB
Author:                 Andrew Sterian, mailto:steriana@gvsu.edu
Maintained-by:          The author
Primary-site:           http://claymore.engineer.gvsu.edu/~steriana/Python
Alternate-site:         None
Original-site:          Same as primary site
Platform:               Unix/Windows
Copying-policy:         Free software, see copyright info below for details
Difficulty-rating:      Some installation required
System-requirements:    None
Software-requirements:  Python 2.4, eGenix mxBase 2.0.4, SimpleParse 2.0.0

This program is useful for designers of electronic printed circuit boards. The
program takes CAM data (Gerber RS274-X and Excellon format) output files from
multiple jobs and combines them (i.e., panelizes) into a single job. Intended
primarily for the Eagle CAD program, other CAD programs such as Orcad and PCB
have been known to work.

END PYTHON-PACKAGE-INFO
">
  <TITLE>GerbMerge -- A Gerber-file merging program</TITLE>
</HEAD>
<BODY BGCOLOR="#ffffff" LINK="#0000c0" VLINK="#8f008f">

<!-- -->

<P><FONT SIZE="+2">GerbMerge -- A Gerber-file merging program</FONT></P>

<BLOCKQUOTE>
  <P><A HREF="http://claymore.engineer.gvsu.edu/~steriana"><FONT
   SIZE="-1">Andrew Sterian</FONT></A><FONT SIZE="-1"><BR>
  Padnos College of Engineering and Computing<BR>
  Grand Valley State University</FONT></P>
</BLOCKQUOTE>

<P><HR ALIGN=LEFT><TABLE WIDTH="100%" BORDER="0" CELLSPACING="2"
CELLPADDING="0">
  <TR>
    <TD>Top-Level | <A HREF="cfgfile.html">The Configuration File</A> | <A HREF="layoutfile.html">The Layout File</A> | <A HREF="autosearch.html">Automatic Placement</A></TD>
    <TD ALIGN="RIGHT"><FONT SIZE="-1">Version 1.6</FONT></TD>
  </TR>
  <TR>
    <TD><!-- --></TD>
    <TD ALIGN="RIGHT"><FONT SIZE="-1">October 6, 2008</FONT></TD> 
  </TR>
  <TR>
    <TD>
    <FONT SIZE="-1"><A HREF="#Installation">Installation</A> | <A HREF="#Requirements">Requirements</A> | 
    <A HREF="#Running">Running GerbMerge</A> | <A HREF="#Verifying">Verifying the Output</A> | <A HREF="#Limitations">Limitations</A> | <A HREF="#ProgramOptions">Program Options</A> | <A HREF="#Copyright">Copyright</A> | <A HREF="#Todo">To
    Do</A> | <A HREF="#Credits">Credits</A> | <A HREF="#History">History</A></FONT></TD> 
    <TD><!-- --></TD>
  </TR>
</TABLE><HR ALIGN=LEFT></P>

<H2>What's New</H2>
<P>In release 1.6:
<UL>
<LI>The <A HREF="cfgfile.html#MinimumFeatureSize"><TT>MinimumFeatureSize</TT></A> configuration option was introduced in order to support enforcing a minimum thickness for silkscreen layers.</LI>
<LI>Negative X/Y co-ordinates in input Gerber files are now supported to allow some Orcad-generated files to be processed.</LI>
<LI>Layout files (i.e., DEF files) now support job names that have hyphens in them (but job names cannot begin with hyphens) and job names that start with numbers.</LI>
<LI>Layout files (i.e., DEF files) now consider job names to be case-insensitive.</LI>
<LI>Python 2.4 is now required.</LI>
</UL>

<P>In release 1.5:
<UL>
<LI>The <A HREF="cfgfile.html#DrillClusterTolerance"><TT>DrillClusterTolerance</TT></A> configuration option was introduced to reduce the number of drill sizes in the output file.</LI>
<LI>Added support for 90, 180, and 270 degree board rotations in the layout file (i.e., the DEF file). Rotated jobs can now be specified as <TT>Rotate</TT> or <TT>Rotate90</TT> for 90-degree rotation, <TT>Rotate180</TT>, or <TT>Rotate270</TT>.</LI>
<LI>Fixed a bug that prevented the placement-file approach from working when there were rotated jobs.</LI>
</UL>

<P>In release 1.4:
<UL>
<LI>Added support for clustering drill sizes in the output file to reduce the number of drills. Clustering tolerance is set by adjusting the TOLERANCE variable in drillcluster.py. <B>NOTE</B>: This approach has been superseded by the <TT>DrillClusterTolerance</TT> configuration option introduced in version 1.5.</LI>
</UL>

<P>In release 1.3:
<UL>
<LI>Gerber files are now generated in 2.5 format, and are also internally
represented in this format for greater accuracy. Excellon files continue to be
generated and represented in 2.4 format.</LI>
<LI>Fixed a bug in generating scoring files that could result in missing scoring lines.</LI>
</UL>

<P>In release 1.2:
<UL>
<LI>Preliminary support was added for CAM files generated by Protel, including polygons, layer polarity, and circular interpolation commands.</LI>
<LI>Bug fix: For Gerber files in anything other than 2.4 format, drawing commands with
repeated, omitted ordinates were incorrectly parsed.</LI>
</UL>

<P>In release 1.1:
<UL>
<LI>A new <A HREF="cfgfile.html#ScoringFile"><TT>ScoringFile</TT></A> configuration option was added. This
option allows for scoring (V-groove) data to be generated in between individual jobs.</LI>
</UL>

<H3>Bug Fixes</H3>
<UL>
<LI>The widths of lines used to draw cut lines and crop marks was 0mil (instead of
the expected default value of 10mil) when these
were not explicitly specified in the configuration file.</LI>
<LI>The <TT>--place-file</TT> option did not work when job names had
uppercase characters.</LI>
</UL>
</UL>

<P><A NAME="Introduction"></A></P>
<H2>Introduction</H2>

  <P>GerbMerge is a program for combining (panelizing) the CAM data from multiple printed
  circuit board designs into a single set of CAM files. The purpose of
  doing so is to submit a single job to a <A HREF="http://claymore.engineer.gvsu.edu/egr326/PCBManufacturing">board 
  manufacturer</A>, thereby saving on manufacturing costs.
  <P>GerbMerge currently works with:
  <UL>
  <LI>CAM data generated by the <A HREF="http://www.cadsoft.de">Eagle</A> circuit board
      design program, with &quot;best effort&quot; support for Orcad, Protel, and <A HREF="http://www.sourceforge.net/projects/pcb">PCB</A></LI>
  <LI>Artwork in Gerber RS274-X format</LI>
  <LI>Drill files in Excellon format</LI>
  </UL>
  Here is <A HREF="sample.png">one sample</A> and <A HREF="sample2.png">another sample</A> of the program's output. These samples
  demonstrate panelizing multiple, different jobs, and also demonstrate board rotation.

  <P>You can download the latest version of GerbMerge from:
  <P><CENTER><A HREF="http://claymore.engineer.gvsu.edu/~steriana/Python"><CODE>http://claymore.engineer.gvsu.edu/~steriana/Python</CODE></A></CENTER>

<P><A NAME="Requirements"></A></P>
<H2>Requirements</H2>
  <P>GerbMerge is written in pure <A HREF="http://www.python.org">Python</A>. It
  depends upon the following packages for operation:
  <UL>
  <LI><A HREF="http://www.python.org">Python</A> version 2.4 or later</LI>
  <LI>eGenix <A HREF="http://www.egenix.com/files/python/eGenix-mx-Extensions.html">mxBase</A>
  tools version 2.0.4 or later</LI>
  <LI><A HREF="http://simpleparse.sourceforge.net">SimpleParse</A> version 2.0.0 or later</LI>
  </UL>
  <P>All of the above packages come with easy installation programs for both Windows
  and Linux.

<P><A NAME="Installation"></A></P>
<H2>Installation</H2>

<P>First, install all of the packages listed above in the Requirements section.

<H3>Windows</H3>
<P>Run the <TT>gerbmerge1.6.exe</TT> installation program. I will assume
you choose all of the default installation options. The installer
will create and populate the following directories:</P>
<UL>
<PRE>
c:\Python24\lib\site-packages\gerbmerge
c:\Python24\gerbmerge
</PRE>
</UL>
<P>The above assumes you have Python installed in <TT>C:\Python24</TT>. The
first directory is where the actual program resides. The second directory
contains the documentation, example files, etc. In the <TT>C:\Python24</TT>
directory is a sample batch file <TT>GERBMERGE.BAT</TT> which shows you how to
run the GerbMerge program.

<H3>Unix</H3>
<P>Extract the <TT>gerbmerge1.6.tar.gz</TT> file then install as follows:</P>
<UL>
<TT>python setup.py install</TT>&nbsp;&nbsp;&nbsp;(You may need to be root to install to system directories)
</UL>
<P>The installer will create and populate the following directories/files:</P>
<UL>
<PRE>
/usr/local/lib/python2.4/site-packages/gerbmerge
/usr/local/lib/python2.4/gerbmerge
/usr/local/bin/gerbmerge
</PRE>
</UL>
<P>The above assumes your Python library directory is as indicated (it may be
elsewhere but the installer should be able to find it, so don't worry about
it). The first directory is where the actual program resides. The second
directory contains the documentation, example files, etc. A sample program for
invoking GerbMerge is installed as <TT>/usr/local/bin/gerbmerge</TT>...feel free to move
it somewhere else.

<P><A NAME="Running"></A></P>
<H2>Running GerbMerge</H2>

<H3>Windows</H3>
<P>Open a DOS box and invoke the Python interpreter on the <TT>gerbmerge.py</TT> file.
Have a look at GERBMERGE.BAT (and put this on your Path somewhere) for an example.
<PRE><CENTER>c:\python24\python c:\python24\lib\site-packages\gerbmerge\gerbmerge.py</CENTER></PRE>
<H3>Unix</H3>
<P>You run GerbMerge by invoking the Python interpreter on the <TT>gerbmerge.py</TT>
file of the <TT>gerbmerge</TT> package. For example:</P>
<PRE><CENTER>python /usr/local/lib/python2.4/site-packages/gerbmerge/gerbmerge.py</CENTER></PRE>
<P>The <TT>gerbmerge</TT> shell script that comes with this software contains an
example for running GerbMerge, modelled on the above. By default, this shell
script is installed in <TT>/usr/local/bin</TT> so you should just be able
to type <TT>gerbmerge</TT> from a shell prompt.
<H3>Operation</H3>
There are three ways to run GerbMerge:
<OL><LI>By manually specifying the relative placement of jobs</LI>
<LI>By manually specifying the absolute placement of jobs</LI>
<LI>By letting GerbMerge automatically search for a placement that minimizes total panel area</LI>
</OL>
<H4>Manual Relative Placement</H4>
For the manual relative placement approach, GerbMerge needs two input text files:
<UL>
<LI><P>The <I>configuration file</I> specifies global options and defines the jobs
to be panelized</LI>
<LI><P>The <I>layout file</I> specifies how the jobs are to be laid out.</LI>
</UL>
<P>The names of these files are the two required parameters to GerbMerge:
<PRE><CENTER>gerbmerge file.cfg file.def</CENTER></PRE>
<P>The following links describe the contents of the <A HREF="cfgfile.html">configuration
file</A> and <A HREF="layoutfile.html">layout file</A>.
<H4>Manual Absolute Placement</H4>
<P>For the manual absolute placement approach, GerbMerge also needs the configuration file
as well as another text file that specifies where each job is located on the panel and
whether or not it is rotated:
<PRE><CENTER>gerbmerge --place-file=place.txt file.cfg</CENTER></PRE>
<P>The <TT>place.txt</TT> file looks something like:
<PRE>job1 0.100 0.100
cpu 0.756 0.100
cpu*rotated 1.35 1.50
</PRE>
<P>This method of placement is not meant for normal use. It can be used to recreate
a previous invocation of GerbMerge, since GerbMerge saves its results in a text file
(whose name is set in the <A HREF="cfgfile.html#MergeOutputFiles"><TT>[MergeOutputFiles]</TT></A>
section of the configuration file) after every run. Thus, you can experiment with
different parameters, save a placement you like, do some more experimentation, then return
to the saved placement if necessary.
<P>Alternatively, this method of placement can be used with third-party back ends that
implement intelligent auto-placement algorithms, using GerbMerge only for doing the
actual panelization.
<H4>Automatic Placement</H4>
<P>For the <A HREF="autosearch.html">automatic placement</A> approach, GerbMerge only needs the configuration file:
<PRE><CENTER>gerbmerge file.cfg</CENTER></PRE>
Command-line options can be used to modify the search algorithm. See the
<A HREF="autosearch.html">Automatic Placement</A> page for more information.
<H3>Input File Requirements</H3>
GerbMerge requires the following input CAM files:
<UL>
<LI><P>Each job must have a Gerber file describing the board outline, which is assumed
rectangular. In Eagle, a board outline is usually generated from the Dimension layer.
This board outline is a width-0 line describing the physical extents of the board. If you're
not using Eagle, you don't have to generate a width-0 rectangle, but GerbMerge does need
to use some Gerber layer to determine the extents of the board. GerbMerge will take the maximum
extents of all drawn objects in this layer as the extents of the board.</LI>
<LI><P>Each job must have an Excellon drill file.</LI>
<LI><P>Each job can have any number of optional Gerber files describing copper
layers, silkscreen, solder masks, etc.</LI>
<LI><P>All files must have the same offset and must be shown looking from the
top of the board, i.e., not mirrored.</LI>
<LI><P>Each job may have an optional tool list file indicating the tool names
used in the Excellon file and the diameter of each tool. This file is not necessary
if tool sizes are embedded in the Excellon file. A typical tool list file looks like:
<PRE>
          T01 0.025in
          T02 0.032in
          T03 0.045in
</PRE>          
</UL>

<P><A NAME="Verifying"></A></P>
<H2>Verifying the Output</H2>

<P>Before sending your job to be manufactured, it is imperative that you verify
the correctness of the output. Remember that GerbMerge comes with NO WARRANTY.
Manufacturing circuit boards costs real money and a single mistake can render
an entire lot of boards unusable.
<P>I recommend the following programs for viewing the final output data. Take
the time to become very familiar with at least one of these tools and to use
it before every job you send out for manufacture.
<DL>
<DT><B>gerbv</B></DT>
<DD>For Linux, the best option (currently) for viewing Gerber and Excellon files
is the <A HREF="http://gerbv.sourceforge.net"><TT>gerbv</TT></A> program. Simply
type in the names of all files generated by GerbMerge as parameters to <TT>gerbv</TT>:
<CENTER><PRE>gerbv merged.*.ger merged.*.xln</PRE></CENTER></DD>
<DT><B>GC-Prevue</B></DT>
<DD><P>For Windows, <A HREF="http://www.graphicode.com">GC-Prevue</A> is a good program
that I have used often. It is a free program. GraphiCode makes lots of other, more
powerful Gerber manipulation and viewing programs but they are quite pricey ($495 and up).</DD>
<DT><B>ViewMate</B></DT>
<DD><P>Another free Windows program, <A HREF="http://www.pentalogix.com">ViewMate</A> is similar
to GC-Prevue. I have not used ViewMate much, but that is mostly due to familiarity with
GC-Prevue. The two programs are comparable, although I'm sure that someone who is much
more familiar with both could point out some differences.</DD>
</DL>

<P><A NAME="Limitations"></A></P>
<H2>Limitations</H2>

<UL>
<LI>This program has mainly been tested with output from the Eagle CAD program.
Limited testing has been performed with Orcad, Protel, and PCB.
Other CAD programs will NOT WORK with a very high probability, as the input
parser is quite primitive.
<P>If you have the need/motivation to adapt GerbMerge to other CAD programs,
have a look at the <TT>gerber2pdf</TT> program. It is written in Python and
implements a much more complete RS274-X input file parser. Combining GerbMerge
with <TT>gerber2pdf</TT> should be a fairly simple exercise. Also, feel free to
send me samples of Gerber/Excellon output of your CAD tool and I'll see if I can
add support for it.
<LI><P>This program handles apertures that are rectangles, ovals, circles, macros
without parameters or operators, and Eagle octagons (which are defined using a macro with a single parameter, hence currently handled as a special case).
<LI><P>The panelizing capabilities of this program do not allow for arbitrary
placement of jobs, although there is a fair amount of flexibility.
<LI><P>All jobs are assumed to be rectangular in shape. Non-rectangular jobs
can be handled but will lead to wasted space in the final panel.
<LI><P>A maximum of 26 different drill sizes is supported for generating a
fabrication drawing.</LI>
</UL>

<P><A NAME="ProgramOptions"></A></P>
<H2>Program Options</H2>

  <DL>
   <DT>--octagons=normal</DT>
   <DT>--octagons=rotate</DT>
   <DD>The <TT>--octagons</TT> option affects how the octagon aperture is defined in the output files. The parameter 
  to this option must either be <TT>rotate</TT> or <TT>normal</TT>. Normally,
  octagons begin at an angle of 22.5 degrees, but some Gerber viewers have a problem
  with that (notably CircuitMaker from LPKF). These programs expect octagons to begin
  at 0.0 degrees.
  <P>The <TT>--octagons=normal</TT> option is the default (22.5 degrees) and need not
  be specified. A rotation of 0.0 degrees can be achieved by specifying <TT>--octagons=rotate</TT>.</DD>

   <P><DT>--random-search</DT>
   <DD>This option is the default when only a configuration file is specified (see the documentation on <A HREF="autosearch.html">Automatic Placement</A> for more information). It indicates that a randomized search of possible job tilings is
   to be performed. This option does not make sense when a layout file is specified.</DD>

   <P><DT>--full-search</DT>
   <DD>This option may be specified to indicate that all possible job tilings are to be searched (see the documentation on <A HREF="autosearch.html">Automatic Placement</A> for more information). This option does not make sense when a layout file
   is specified.</DD>

   <P><DT>--rs-fsjobs=N</DT>
   <DD>This option is used with randomized search to indicate how many jobs are to undergo full search for each tiling. See the documentation on <A HREF="autosearch.html">Automatic Placement</A> for more information.</DD>

   <P><DT>--place-file=filename</DT>
   <DD>This option performs a panel layout based upon absolute job positions in
   the given text file, rather than by random/full search or by a layout file.
   The placement file created by GerbMerge can be used as an input file to 
   this option in order to recreate a previous layout.</DD>

   <P><DT>--no-trim-gerber</DT>
   <DD>This option prevents GerbMerge from trying to trim all Gerber data to lie within the
   extents of a given job's board outline. Normally, GerbMerge will try to do so to prevent
   one job's Gerber data (most notably, silkscreen lines for connectors that protrude from
   the board) from interfering with a neighboring job on the final panel. Specify this
   command-line option if you do not want this trimming to occur.</DD>

   <P><DT>--no-trim-excellon</DT>
   <DD>This option prevents GerbMerge from trying to trim all Excellon data to lie within the
   extents of a given job's board outline. Normally, GerbMerge will try to do so to prevent
   one job's drill holes from landing in the middle of a neighboring job on the final panel. Specify
   this command-line option if you do not want this trimming to occur.</DD>

   <P><DT>-h, --help</DT>
   <DD>The '<TT>-h</TT>' or '<TT>--help</TT>' option prints a brief summary of available options.

   <P><DT>-v, --version</DT>
   <DD>The '<TT>-v</TT>' or '<TT>--version</TT>' option prints the current program version and author contact information.</DD>
  </DL>

<P><A NAME="Copyright"></A></P>
<H2>Copyright &amp; License</H2>

  <P>Copyright &COPY; 2003-2008 <A HREF="http://claymore.engineer.gvsu.edu/~steriana">Andrew Sterian</A>. All Rights Reserved.
  mailto: <A HREF="mailto:steriana@claymore.engineer.gvsu.edu?subject=GerbMerge">steriana@claymore.engineer.gvsu.edu</A>
  <P>GerbMerge comes with ABSOLUTELY NO WARRANTY. This
  is free software licensed under the terms of the <A HREF="gpl.html">GNU General
  Public License</A>. You are welcome to redistribute this software
  under certain conditions. For more details, see the previous link or
  visit <A HREF="http://www.fsf.org">The Free Software Foundation</A>.

<P><A NAME="Todo"></A></P>
<H2>To Do</H2>

  <OL>
    <LI>Accept outputs from more CAD programs</LI>
    <LI>A graphical interface for interactive placement</LI>
    <LI>Better reporting of parse errors in the layout and configuration files</LI>
    <LI>Implement simple primitive for panelizing a single job in an array</LI>
    <LI>More intelligent placement algorithms, possibly based on the fabric cutting problem.</LI>
    <LI>Accept aperture macro parameters and operators
  </OL>

<P><A NAME="Credits"></A></P>

<H2>Credits</H2>
  <P>Thanks to Jace Browning for major contributions to this code. This help file is based on a template for the help file for mxTools
  by <A HREF="http://starship.python.net/crew/lemburg">M.A. Lemburg</A>.
  This software was created with <A HREF="http://www.vim.org/">VIM</A>;
  thanks to the authors of this program and special thanks for
  the Python syntax support. Thanks to M.A. Lemburg for his
  <A HREF="http://www.egenix.com/files/python/eGenix-mx-Extensions.html">mxBase</A>
  package, Mike Fletcher for his
  <A HREF="http://simpleparse.sourceforge.net">SimpleParse</A> package, and
  the authors of <A HREF="http://gerbv.sourceforge.net">gerbv</A>, a great
  Gerber file viewer for Linux, and, of course, to the
  <A HREF="http://www.python.org">Python</A> developers and
  support community.</P>
  <P>Thanks to <A HREF="http://saber.engineer.gvsu.edu/user/pighettf">Joe Pighetti</A> for making me start writing this program, and to
  the Grand Valley State University <A HREF="http://saber.engineer.gvsu.edu/user/robot">
  Firefighting Robot Team</A> for making me finish it.</P>
  <P>Thanks to Matt Kavalauskas for identifying Eagle's annulus and thermal macros and supporting
  the development of the aperture macro code.</P>

<P><A NAME="History"></A></P>

<H2>History</H2>

  <P>Version 1.6 -- October 5, 2008
  <UL>
  <LI>A new configuration option was introduced (<TT>MinimumFeatureSize</TT>) that
    implements automatic feature thickening to some minimum dimension. This is
    intended to automatically thicken silkscreen layers.</LI>
  <LI>Negative X/Y co-ordinates in input files are now supported.</LI>
  <LI>Layout files (i.e., DEF files) now support job names that have hyphens in
    them, and names that start with numbers.</LI>
  <LI>Job names are case-insensitive in layout files. You should not have two job
    names specified in the configuration file that differ only in case.</LI>
  </UL>

  <P>Version 1.5 -- September 15, 2008
  <UL>
  <LI>Added <TT>DrillClusterTolerance</TT> configuration option to control drill
    clustering. The TOLERANCE global variable in <TT>drillcluster.py</TT> was removed.</LI>
  <LI>Added support for 90, 180, and 270 degree board rotations in manual layout.
    Automatic placement still only tries board rotations of 90 degrees.</LI>
  <LI>Fixed bug that prevented the placement file approach from working when
    there were rotated jobs.</LI>
  </UL>

  <P>Version 1.4 -- September 10, 2008
  <UL>
  <LI>Drills can now be optionally clustered to reduce the total number of drills in the
    merged job. Cluster tolerance is set by adjusting TOLERANCE in <TT>drillcluster.py</TT>.</LI>
  </UL>

  <P>Version 1.3 -- October 31, 2006
  <UL>
  <LI>Gerber files are now generated and represented in 2.5 format.</LI>
  <LI>Bug fix in generating scoring lines.</LI>
  </UL>
  <P>Version 1.2 -- September 16, 2006
  <UL>
  <LI>Added support for Protel-generated Gerber/Excellon files.</LI>
  <LI>Ensured Excellon tool numbers always have at least two digits (e.g., 'T01' instead of 'T1').</LI>
  </UL>
  <P>Version 1.1 -- November 10, 2005
  <UL>
  <LI>Added <TT>ScoringFile</TT> option.</LI>
  </UL>
  <P>Version 1.0 -- August 20, 2005
  <UL>
  <LI>The configuration file now has a <TT>MergeOutputFiles</TT> section allowing user-configurable output file names.</LI>
  <LI>The <TT>OutlineLayer</TT> config option is now called <TT>OutlineLayerFile</TT>.</LI>
  <LI>The <TT>FabricationDrawing</TT> config option is now called <TT>FabricationDrawingFile</TT>.</LI>
  <LI>The sample configuration files have much more documentation.</LI>
  <LI>Changed the default <TT>XSpacing</TT>/<TT>YSpacing</TT> values to 0.125".</LI>
  <LI>BUG: Unspecified cut line/crop line/etc. widths ended up being 0-mil lines instead of the default 10-mil lines.</LI>
  <LI>The default value of <TT>ExcellonDecimals</TT> is now 4 instead of 3.</LI>
  <LI>The internal drill location representation is now in 2.4 instead of 2.3 format.</LI>
  <LI>Aperture codes with more than 2 digits are accepted as input.</LI>
  <LI>The initial exposure-off flash command in each layer has been moved to be at a non-negative co-ordinate.</LI>
  <LI>Better documentation of configuration file format syntax.</LI>
  <LI>Fewer rotated aperture macros are generated, leading to smaller Gerber output files.</LI>
  <LI>Gerber files now only write out aperture and macro definitions actually
    used in that file, leading to slightly smaller Gerber output files.</LI>
  <LI>Python 2.3 is now required.</LI>
  <LI>BUG: <TT>--place-file</TT> did not work when job names had uppercase characters.</LI>
  <LI>Drills that occur outside of the board outline (as set by the
    <TT>BoardOutline</TT> layer in the configuration file) are deleted, unless <TT>--no-trim-excellon</TT>
    is specified.</LI>
  <LI>A new configuration option <TT>ExcellonLeadingZeros</TT> causes leading zeros to
    be written to the merged Excellon file.</LI>
  <LI>New configuration options <TT>LeftMargin</TT>, <TT>TopMargin</TT>, <TT>RightMargin</TT>,
  <TT>BottomMargin</TT> were introduced.</LI>
  <LI>Jobs are now trimmed to the extents of the board outline (as set by the <TT>BoardOutline</TT> layer in
  the configuration file) unless <TT>--no-trim-gerber</TT> is specified.</LI>
  </UL>

  <P>Version 0.9 -- August 12, 2005
  <UL>
    <LI>Added aperture macro support</LI>
    <LI>Excellon files are now generated in 2.4 format</LI>
    <LI>Job-specific <TT>ExcellonDecimals</TT> parameter was added</LI>
  </UL>
  <P>Version 0.8 -- October 16, 2004
  <UL>
    <LI>Added new <TT>OutlineLayer</TT> configuration option</LI>
  </UL>
  <P>Version 0.7 -- August 27, 2004
  <UL>
    <LI>Added support for automatic placement.</LI>
    <LI>Added support for manual placement from a text file.</LI>
    <LI>Added new <TT>PanelWidth</TT> and <TT>PanelHeight</TT> global configuration options.</LI>
    <LI>Added new <TT>--random-search</TT>, <TT>--full-search</TT>, <TT>--place-file</TT>, and <TT>--rs-fsjobs</TT>
    command-line options.</LI>
    <LI>Added new <TT>Repeat</TT> configuration option to support automatic placement.</LI>
    <LI>Every successful run of GerbMerge now writes the final job placement in a <TT>merged.placement.txt</TT> file.</LI>
    <LI>Fixed a bug that prevented some drills from appearing in the merged output files when a job had a tool list
    with different tool names but the same drill sizes.</LI>
  </UL>
  <P>Version 0.6 -- April 26, 2004
  <UL>
    <LI>Added support for the new Excellon format of Eagle version 4.11r2.</LI>
    <LI>Added support for <A HREF="http://www.sourceforge.net/projects/pcb">PCB</A> in the RS274X and Excellon parser.</LI>
    <LI>The global <A HREF="cfgfile.html#Parameters">ToolList</A> file is now optional. Each job can specify its own
    tool list, or the tool sizes can be deduced from Excellon files which have tool size information. The global ToolList
    option is still used to specify tool sizes for jobs that have none of the above.</LI>
    <LI>Added new <TT>CutLineWidth</TT> and <TT>CropMarkWidth</TT> options.</LI>
    <LI>Backwards-incompatibly removed the <TT>Spacing</TT> option and replaced it with <TT>XSpacing</TT> and <TT>YSpacing</TT>.
  </UL>

  <P>Version 0.5 -- March 1, 2004
  <UL>
    <LI>Added support for Orcad in the RS274X parser.</LI>
    <LI>Added <TT>ExcellonDecimals</TT> configuration file option, to support Excellon files generated by Orcad.</LI>
    <LI>The tool list file format was relaxed a bit to allow more whitespace and to support mils.</LI>
  </UL>
  <P>Version 0.4 -- November 26, 2003
  <UL>
    <LI>Fixed an error that occured when more than 99 apertures were present in the merged files. All apertures above D99 were
    ignored and did not appear in the merged output</LI>
    <LI>All carriage-return (0x0D) characters are stripped from input files allowing DOS-generated input files to be processed on a Unix system</LI>
    <LI>Added 7 more glyphs to the drill symbols for the fabrication drawing, now allowing up to 26 different tool symbols</LI>
  </UL>
  <P>Version 0.3 -- October 23, 2003
  <UL>
    <LI>Added support for Eagle 4.11</LI>
  </UL>
  <P>Version 0.2 -- May 16, 2003
  <UL>
    <LI>Added support for fabrication drawings</LI>
  </UL>

  <P>Version 0.1 -- March 4, 2003
  <UL>
    <LI>Initial release</LI>
  </UL>

<HR ALIGN=LEFT>

<P><CENTER><FONT SIZE="-1">&COPY; 2003-2008, Copyright by <A HREF="http://claymore.engineer.gvsu.edu/~steriana">Andrew
Sterian</A>; All Rights Reserved. mailto: <A HREF="mailto:steriana@claymore.engineer.gvsu.edu?subject=GerbMerge">steriana@claymore.engineer.gvsu.edu</A></FONT></CENTER>

</BODY>
</HTML>
